package com.quectel.core.module.partyeducationexam.dto;

import com.quectel.core.module.partybuilding.dto.PartyOrganizationDto;
import com.quectel.core.module.partybuilding.dto.PartyPersonDto;
import com.quectel.core.module.partyeducationexam.dto.ref.QuestionRefExamDto;
import com.quectel.core.module.partyeducationtraining.dto.TrainingDto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 *
 * @author ryan
 * @email ryan.ran@quectel.com
 * @date 2023/06/27 15:26
 */
@Data
@Schema
public class PartyEducationTrainingExamDto implements Serializable {

    /**
    *
    */
    @Schema(description = "")
    private Long id;

    /**
    * 租户id
    */
    @Schema(description = "租户id")
    private Long tenantId;

    /**
    * 党组织id
    */
    @Schema(description = "党组织id")
    private Long partyId;

    /**
    * 课程 id
    */
    @Schema(description = "课程 id")
    private Long trainingId;

    /**
    * 考试名称
    */
    @Schema(description = "考试名称")
    private String name;

    /**
    * 选题模式 1 固定选题 2 随机抽题
    */
    @Schema(description = "选题模式 1 固定选题 2 随机抽题")
    private Byte selectMode;

    /**
    * 阅卷模式 1全自动 2半自动
    */
    @Schema(description = "阅卷模式 1全自动 2半自动")
    private Byte gradeMode;

    /**
    * 总分
    */
    @Schema(description = "总分")
    private Integer totalScore;

    /**
    * 及格分
    */
    @Schema(description = "及格分")
    private Integer passScore;

    /**
    * 开始时间
    */
    @Schema(description = "开始时间")
    private Date startTime;

    /**
    * 结束时间
    */
    @Schema(description = "结束时间")
    private Date endTime;

    /**
    * 提前提醒分钟数
    */
    @Schema(description = "提前提醒分钟数")
    private Integer preTipsMinute;

    /**
    * 作答分钟数
    */
    @Schema(description = "作答分钟数")
    private Integer answerMinute;

    /**
    * 允许参加次数 0不限
    */
    @Schema(description = "允许参加次数 0不限")
    private Byte allowTime;

    /**
    * 答案显示时机 1交卷立即 2答题结束 3考试结束
    */
    @Schema(description = "答案显示时机 1交卷立即 2考试结束")
    private Byte answerShowMoment;

    /**
     * 考试状态 0 未发布 1 已发布 2 已取消
     */
    @Schema(description = "考试状态 0 未发布 1 已发布 2 已取消")
    private Byte status;

    /**
     * 推送状态 0 未推送 1 已推送
     */
    @Schema(description = "推送状态 0 未推送 1 已推送")
    private Byte pushStatus;

    /**
     * 最早推送时间
     */
    @Schema(description = "最早推送时间")
    private Date pushTime;

    /**
    * 考试说明
    */
    @Schema(description = "考试说明")
    private String examExplain;

    /**
    * 题目数量 注意加锁更新
    */
    @Schema(description = "课时数量 注意加锁更新")
    private Integer examQuestionCount;

    /**
    * 考试总人员数
    */
    @Schema(description = "考试总人员数")
    private Integer examPersonCount;

    /**
    * 考试完成的人员数量
    */
    @Schema(description = "考试完成的人员数量")
    private Integer examCompletePersonCount;

    /**
     * 问题设置
     */
    @Schema(description = "问题设置")
    private String questionSetting;

    /**
    * 创建人
    */
    @Schema(description = "创建人")
    private String creator;

    /**
    * 创建时间
    */
    @Schema(description = "创建时间")
    private Date createTime;

    /**
    * 修改人
    */
    @Schema(description = "修改人")
    private String editor;

    /**
    * 修改时间
    */
    @Schema(description = "修改时间")
    private Date editTime;

    /************非数据库字段 start ************/
    @Schema(description = "党组织信息")
    private PartyOrganizationDto party;

    @Schema(description = "课程信息")
    private TrainingDto training;

    @Schema(description = "人员信息")
    private List<PartyPersonDto> persons;

    @Schema(description = "人员ids")
    private Long[] personIds;

    @Schema(description = "考试具体状态 0 未发布 1 未开始 2 进行中 3 已结束 4 已取消")
    private Byte specificStatus;

    @Schema(description = "题目列表")
    List<QuestionRefExamDto> questions;

    @Schema(description = "实际题目数量")
    Integer questionCount;

    @Schema(description = "分享链接")
    private String link;

    @Schema(description = "考试测试 id，某一次具体考试测试id")
    private Long testId;

    /************非数据库字段 end **************/
}
